package com.amigo.online.consumer.user.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.amigo.online.common.core.response.Response;
import com.amigo.online.common.param.dto.user.AccountDto;
import com.amigo.online.common.param.dto.user.AroundPeopleDto;
import com.amigo.online.common.param.dto.user.AroundPeopleImgDto;
import com.amigo.online.common.param.dto.user.CompleteDto;
import com.amigo.online.common.param.dto.user.DeletePhotoDto;
import com.amigo.online.common.param.dto.user.GetReginIdDto;
import com.amigo.online.common.param.dto.user.PasswordDto;
import com.amigo.online.common.param.dto.user.PhotoDto;
import com.amigo.online.common.param.dto.user.ProbePeopleDto;
import com.amigo.online.common.param.dto.user.ReplacePhotoDto;
import com.amigo.online.common.param.dto.user.SexDto;
import com.amigo.online.common.param.dto.user.SuggestDto;
import com.amigo.online.common.param.dto.user.TipOffDto;
import com.amigo.online.common.param.dto.user.UserInfoDto;
import com.amigo.online.common.param.dto.user.UserNotifyDto;

@FeignClient(name = "amigo-online-provider-user")
public interface UserService {

	@RequestMapping(value = "/user/complete", method = RequestMethod.POST)
    public ResponseEntity<Response> complete(CompleteDto dto);
	
	@RequestMapping(value = "/user/info", method = RequestMethod.POST)
	public ResponseEntity<Response> updateUserInfo(UserInfoDto dto);
	
	@RequestMapping(value = "/user/info", method = RequestMethod.GET)
	public ResponseEntity<Response> getUserInfo();
	
	@RequestMapping(value = "/user/info/{id}", method = RequestMethod.GET)
	public ResponseEntity<Response> getUserInfoById(@PathVariable(value = "id") Long id);
	
	@RequestMapping(value = "/user/account", method = RequestMethod.PUT)
	public ResponseEntity<Response> updateUserAccount(AccountDto dto);
	
	@RequestMapping(value = "/user/photo", method = RequestMethod.POST)
	public ResponseEntity<Response> newUserPhoto(PhotoDto dto);
	
	@RequestMapping(value = "/user/photo/delete", method = RequestMethod.POST)
	public ResponseEntity<Response> deleteUserPhoto(DeletePhotoDto dto);
	
	@RequestMapping(value = "/user/photos", method = RequestMethod.GET)
	public ResponseEntity<Response> getUserPhotos();
	
	@RequestMapping(value = "/user/photos/{id}", method = RequestMethod.GET)
	public ResponseEntity<Response> getUserPhotosByUid(@PathVariable(value = "id") Long id);
	
	@RequestMapping(value = "/user/password", method = RequestMethod.PUT)
	public ResponseEntity<Response> updateUserPassword(PasswordDto dto);
	
	@RequestMapping(value = "/user/qiniu/token/avatar", method = RequestMethod.GET)
	public ResponseEntity<Response> getUserQiniuToken();
	
	@RequestMapping(value = "/user/qiniu/token/photos", method = RequestMethod.GET)
	public ResponseEntity<Response> getQiniuPhotosToken();

	@RequestMapping(value = "/user/qiniu/token/video", method = RequestMethod.GET)
	public ResponseEntity<Response> getQiniuVideoToken();
	
	@RequestMapping(value = "/user/qiniu/token/complain", method = RequestMethod.GET)
	public ResponseEntity<Response> getQiniucomplainToken();

	@RequestMapping(value = "/user/logout", method = RequestMethod.POST)
	public ResponseEntity<Response> logout();
	
	@RequestMapping(value = "/user/mongo/{id}",method = RequestMethod.GET)
	public ResponseEntity<Response> getUserInfoFromMongo(@PathVariable(value = "id")Long id);

	@RequestMapping(value = "/user/getAll",method = RequestMethod.GET)
	public ResponseEntity<Response> getAll();

	@RequestMapping(value = "/user/user/around",method = RequestMethod.POST)
	public ResponseEntity<Response> findAroundPeople(AroundPeopleDto dto);

	@RequestMapping(value = "/user/user/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> findPartAroundPeoleImg(AroundPeopleImgDto dto);

	@RequestMapping(value = "/user/userInfoNum/{id}",method = RequestMethod.GET)
	public ResponseEntity<Response> getUserInfoNum(@PathVariable(value = "id")Long id);

	@RequestMapping(value = "/user/newTipOff",method = RequestMethod.POST)
	public ResponseEntity<Response> newTipOff(TipOffDto dto);
	
	@RequestMapping(value = "/user/getRegionId",method = RequestMethod.POST)
	public ResponseEntity<Response> getRegionId(GetReginIdDto dto);

	@RequestMapping(value = "/user/userInfo/{token}",method = RequestMethod.GET)
	public ResponseEntity<Response> checktoken(@PathVariable(value = "token")String token);

	/*-------------*/
	
	@RequestMapping(value = "/user/bindface/{facebookID}", method = RequestMethod.GET)
	public ResponseEntity<Response> bindface(@PathVariable(value = "facebookID") String facebookID);
	
	@RequestMapping(value = "/user/privacy", method = RequestMethod.POST)
	public ResponseEntity<Response> setSecretLevel(UserInfoDto dto);
	
	@RequestMapping(value = "/user/bind/{type}/{flag}/{code}", method = RequestMethod.GET)
	public ResponseEntity<Response> bind(@PathVariable(value = "type") Integer type, @PathVariable(value = "flag") String flag,@PathVariable(value = "code") String code);
	
	@RequestMapping(value = "/user/notify", method = RequestMethod.POST)
	public ResponseEntity<Response> setNotifyLevel(UserNotifyDto dto);

	@RequestMapping(value = "/user/unbind/{type}", method = RequestMethod.GET)
	public ResponseEntity<Response> unBind(@PathVariable(value = "type") Integer type);

	@RequestMapping(value = "/user/area/{lang}/{id}", method = RequestMethod.GET)
	public ResponseEntity<Response> getAreaInfo(@PathVariable(value = "lang") String lang, @PathVariable(value = "id") Long id);
	
	@RequestMapping(value = "/user/sex", method = RequestMethod.PUT)
	public ResponseEntity<Response> updateUserSex(SexDto dto);

	@RequestMapping(value = "/user/photo/replace", method = RequestMethod.POST)
	public ResponseEntity<Response> repalceUserPhoto(ReplacePhotoDto dto);

	@RequestMapping(value = "/user/updateLoginTime", method = RequestMethod.POST)
	public ResponseEntity<Response> updateLastLoginTime();

	@RequestMapping(value = "/tan/probe", method = RequestMethod.POST)
	public ResponseEntity<Response> probePeople(@RequestBody ProbePeopleDto probePeopleDto);
	
	@RequestMapping(value = "/tan/openT", method = RequestMethod.GET)
	public ResponseEntity<Response> openT();

	@RequestMapping(value = "/tan/closeT", method = RequestMethod.GET)
	public ResponseEntity<Response> closeT();
	
	@RequestMapping(value = "/user/suggest", method = RequestMethod.POST)
	public ResponseEntity<Response> suggest(SuggestDto dto);
	
	@RequestMapping(value = "/user/tantan/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> findTantanPartAroundPeoleImg(AroundPeopleImgDto dto);
	
	@RequestMapping(value = "/user/v1/user/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> testFindPartAroundPeoleImg(AroundPeopleImgDto dto);
	
	@RequestMapping(value = "/user/private/compression/{startId}/{endId}",method = RequestMethod.POST)
	public ResponseEntity<Response> getUserImgById(@PathVariable(value = "startId") Long startId, @PathVariable(value = "endId") Long endId);
	
	@RequestMapping(value = "/user/avatar/s/{userId}", method = RequestMethod.GET)
	public String rebackImgStream(@PathVariable(value = "userId") Long userId);
	
	@RequestMapping(value = "/user/v2/user/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> testFindPartAroundPeoleImgV2(AroundPeopleImgDto dto);
	
	@RequestMapping(value = "/user/v3/tantan/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> findTantanPartAroundPeoleImgV3(AroundPeopleImgDto dto);
	
	@RequestMapping(value = "/user/v3/user/partAround",method = RequestMethod.POST)
	public ResponseEntity<Response> findPartAroundPeoleImgV3(AroundPeopleImgDto dto);

	@RequestMapping(value = "/user/getUserByNicknameOrPhone/{param}",method = RequestMethod.GET)
	public ResponseEntity<Response> getUserByNicknameOrPhone(@PathVariable(value = "param") String param);

	@RequestMapping(value = "/user/inviteCode",method = RequestMethod.GET)
	public ResponseEntity<Response> getInviteCode();

	@RequestMapping(value = "/user/useInviteCode/{code}",method = RequestMethod.GET)
	public ResponseEntity<Response> useInviteCode(@PathVariable(value = "code") String code);

	@RequestMapping(value = "/user/inviteCodeView",method = RequestMethod.GET)
	public ResponseEntity<Response> inviteCodeView();

	@RequestMapping(value = "/getValueByVersion/{version}",method = RequestMethod.GET)
	public ResponseEntity<Response> getValueByVersion(@PathVariable(value = "version") String version);
	
}
